Piping Serverにチャンクで送受信をする意義
チャンクで送受信の意味
チャンクで送受信の意味は、長いデータを細切れにしてそれを複数のHTTPリクエストで送信/受信するという意味。
より具体的には、/mydata/1, /mydata2, ...とかにPOSTしたりGETしたりするような感じ。
意義
ブラウザでPOSTするときにJavaScriptがストリーミングしてボディをPOSTできないので、それを対処できる
ファイルをエンドツーエンドで暗号化して送信するにはストリームは必要
長いデータをストリーミングできないHTTPサーバーの裏にPiping Serverをデプロイしても使える
Nginxだとデフォルトでボディのmaxなどがある。NginxをリバースプロキシしてもOK
長いコネクションをタイムアウトする設定になっているサーバーにも対応
localhostでの動作確認で47日間転送し続け868テラバイトはできた
だが、リバースプロキシの設定などで長い接続がタイムアウトする場合もある
複数のPiping Serverにチャンクを送れる
目的としては、
高速化(違うサーバーへ同時送信受信できれば早くなるかも)
セキュリティ(すべてのデータが一箇所に集まらないので、分散してセキュリティ向上できそう)
冗長化(同じデータを複数のサーバーに送って集めれば冗長化して、より正確(チェックサムではかる正確さ)になりそう)
フローの制御などを自前でできそう(別に制御する計画をしてないができそうというだけ)
?n=受信者数をチャンクの途中で変更できる
チャンクが1つのリクエストになるため、途中からnを増やしたり減らしたりできる
データ配信途中に人数が変更されるようなフローも実現できる
アプリケーション
上記の実装に色々と加えてもいいし、他のチャンク転送の実装を作っても良いはず。あくまでも実装の一つ。